package com.fzy.core.common;

import java.util.ArrayList;
import java.util.List;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 汉语拼音转化工具
 * @author shuang
 *
 */
public class HanyuPinyinCommon {
	/**
	 * 以大写的形式获取某个字符串的第一个字的拼音
	 * @param hanyuStr
	 * @return
	 */
	public static String HanyuFirstToPinYin(String hanyuStr) {
		HanyuPinyinOutputFormat hpof=new HanyuPinyinOutputFormat();
		hpof.setCaseType(HanyuPinyinCaseType.UPPERCASE);
		hpof.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		hpof.setVCharType(HanyuPinyinVCharType.WITH_V);
		//转成字符数组
		char[] hanyuCharArray = hanyuStr.toCharArray();
		//如果为空或者长度为0，则返回原字符串
		if(hanyuCharArray==null ||hanyuCharArray.length==0){
			return hanyuStr;
		}
		try {
			//将首字母转成拼音，因为可能是多音字，所以存入数组
			String[] strs = PinyinHelper.toHanyuPinyinStringArray(hanyuCharArray[0], hpof);
			if(strs!=null&&strs.length>0){//说明该字符是中文
				List<String> list=new ArrayList<String>();
				for(String str:strs){
					if(!list.contains(str)){//如果数组里面已经有了这个英文字符串说明只是读音的不同
						list.add(str);
					}
				}
				return list.get(list.size()-1);
			}else{
				return String.valueOf(hanyuCharArray[0]);
			}
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
			return hanyuStr;
		}
	}
	/**
	 * 以大写形式获取字符串首字母组合的字符串
	 * @param hanyuStr
	 * @return
	 */
	public static String HanyuToPinYinStrFirstLetter(String hanyuStr){
		HanyuPinyinOutputFormat hpof=new HanyuPinyinOutputFormat();
		hpof.setCaseType(HanyuPinyinCaseType.UPPERCASE);
		hpof.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		hpof.setVCharType(HanyuPinyinVCharType.WITH_V);
		//转成字符数组
		char[] hanyuCharArray = hanyuStr.toCharArray();
		//如果为空或者长度为0，则返回原字符串
		if(hanyuCharArray==null ||hanyuCharArray.length==0){
			return hanyuStr;
		}
		String tempStr="";
		String[] strs=null;
		List<String> list=null;
		for(char hanyuChar:hanyuCharArray){//循环字符数组
			try {
				strs = PinyinHelper.toHanyuPinyinStringArray(hanyuChar, hpof);
				if(strs!=null&&strs.length>0){//说明该字符是中文
					list=new ArrayList<String>();
					for(String str:strs){
						if(!list.contains(str)){//如果数组里面已经有了这个英文字符串说明只是读音的不同
							list.add(str);
						}
					}
					tempStr+= list.get(list.size()-1).toCharArray()[0];
				}else{//不是中文
					tempStr+=String.valueOf(hanyuChar).toUpperCase();
				}
			} catch (BadHanyuPinyinOutputFormatCombination e) {
				e.printStackTrace();
				return hanyuStr;
			}
		}
		return tempStr;
	}
}
